﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace DefensiveShield
{
    public partial class OsSession
    {
        //---------------------------------------------------------------------------------------------------------------------------------
        //---------------------------------------------------------------------------------------------------- LOGIN ----------------------
        //---------------------------------------------------------------------------------------------------------------------------------
        /**
            @brief Эта функция проверяет правильность пароля и логина пользователя.
             * 
             * Функция подсчитывает количество неудачных попыток входа
             * 
            @return Код ошибки
        */
        public ErrorCodes Login(string userName, string password)
        {
            if (FailedAuthorization >= AvailableAuthorizationAttemptsNum && userName != OS.AdministratorName)
            {
                OS.LogMessage(userName, "Error in loggin in. Too many attempts, waiting admin login.");
                return ErrorCodes.NotAdminLogin;
            }

            if (OS.CheckUserPassword(userName, password) != ErrorCodes.NoError)
            {
                OS.LogMessage(userName, "Error in logging in.");
                FailedAuthorization++;
                return ErrorCodes.WrongPassword;
            }

            UserName = userName;
            FailedAuthorization = 0;
            //SessionSecrecy = OS.Users[UserName].SecrecyNum;
            SessionSecrecy = Secrecy.NonSecret;

            OS.LogMessage(userName, "User logged in.");
            return ErrorCodes.NoError;
        }

        //---------------------------------------------------------------------------------------------------------------------------------
        //---------------------------------------------------------------------------------------------------- LOGOUT ---------------------
        //---------------------------------------------------------------------------------------------------------------------------------
        /**
            @brief Эта функция завершает сеанс пользователя
            @return Код ошибки
        */

        public ErrorCodes LogOut()
        {
            OS.LogMessage(UserName, "User logged out.");
            FailedAuthorization = 0;
            UserName = "";
            SessionSecrecy = Secrecy.NonSecret;
            
            return ErrorCodes.NoError;
        }
    }
}
